/**
 *  1. 在函数执行之前、之后绑定额外的逻辑
    2. 转换函数的返回结果
    3. 转换从函数抛出的异常
    4. 扩展基本函数的行为
    5. 根据所选条件重写函数
 * 
 */
import { Injectable, NestInterceptor, ExecutionContext, CallHandler, } from '@nestjs/common'
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
interface IResponce<T> {
    data: T
}

@Injectable() // 用于标记一个类可以作为依赖项注入到其他类中
export class TransformInterceptor<T> implements NestInterceptor<T, IResponce<T>> {
    intercept(context: ExecutionContext, next: CallHandler): Observable<IResponce<T>> {
        return next.handle().pipe(map(data => {
            return {
                data,
                code: 200,
                message: '操作成功'
            }
        }))
    }
}